package com.ecommerce.onion.domain;

import java.math.BigDecimal;
import java.util.Objects;
import java.util.UUID;
/**
 * @packageName: domain（领域包）
 * @className: OrderItem(订单项目领域)
 * @description: 订单项目列表中使用的订单项目
 * @author: luds
 * @version: v1.0
 * @date: 2021-03/25
 */
public class OrderItem {
    /**
     * 订单项目ID
     */
    private UUID productId;
    /**
     * 订单项目价格
     */
    private BigDecimal price;

    /**
     * 默认构造器
     */
    public OrderItem(){}
    /**
     * 由产品构建订单项目
     * @param product 产品实例
     */
    public OrderItem(final Product product) {
        // 产品ID取出来，给订单项目ID
        this.productId = product.getId();
        // 产品价格取出来，给订单项目价格
        this.price = product.getPrice();
    }

    /**
     * 获取订单项目ID
     * @return 返回订单项目ID
     */
    public UUID getProductId() {
        return productId;
    }

    /**
     * 获取订单项目价格
     * @return 返回订单项目u价格
     */
    public BigDecimal getPrice() {
        return price;
    }
    /**
     * 如果是此订单项目本身就返回true，如果不是订单项目就返回false；
     * 除了上述两种情况：如果订单项目ID、价格都相同，就返回true，否则false
     * @param o: 比较对象
     * @return 比较结果
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        OrderItem orderItem = (OrderItem) o;
        return Objects.equals(productId, orderItem.productId) && Objects.equals(price, orderItem.price);
    }
    /**
     * 由ID、订单项目价格组合成哈希值
     * @return 返回哈希值
     */
    @Override
    public int hashCode() {
        return Objects.hash(productId, price);
    }
}
